/******************************************************************************* * Copyright (c) 2015 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation ******************************************************************************/ package org.eclipse.ui.internal.e4.migration; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.ui.IMemento; import org.eclipse.ui.XMLMemento; import org.eclipse.ui.internal.IWorkbenchConstants; public class WindowReader extends MementoReader { public static final String STATUS_LINE_MANAGER_ID = "org.eclipse.jface.action.StatusLineManager"; //$NON-NLS-1$ WindowReader(IMemento memento) { super(memento); } Rectangle getBounds() { Rectangle windowBounds = new Rectangle(0, 0, 0, 0); Integer bigInt = getInteger(IWorkbenchConstants.TAG_X); windowBounds.x = bigInt == null ? 0 : bigInt.intValue(); bigInt = getInteger(IWorkbenchConstants.TAG_Y); windowBounds.y = bigInt == null ? 0 : bigInt.intValue(); bigInt = getInteger(IWorkbenchConstants.TAG_WIDTH); windowBounds.width = bigInt == null ? 0 : bigInt.intValue(); bigInt = getInteger(IWorkbenchConstants.TAG_HEIGHT); windowBounds.height = bigInt == null ? 0 : bigInt.intValue(); return windowBounds; } boolean isMaximized() { return getBoolean(IWorkbenchConstants.TAG_MAXIMIZED, false); } boolean isMinimized() { return getBoolean(IWorkbenchConstants.TAG_MINIMIZED, false); } boolean isCoolbarVisible() { IMemento trimLayoutMem = getChild(IWorkbenchConstants.TAG_TRIM); if (trimLayoutMem == null) { return false; } boolean visible = false; IMemento[] trimAreas = trimLayoutMem.getChildren(IWorkbenchConstants.TAG_TRIM_AREA); IMemento topTrim = null; for (IMemento trimArea : trimAreas) { // ITrimManager.TOP == SWT.TOP if (SWT.TOP == trimArea.getInteger(IMemento.TAG_ID)) { topTrim = trimArea; break; } } if (topTrim != null) { IMemento[] trimItems = topTrim.getChildren(IWorkbenchConstants.TAG_TRIM_ITEM); for (IMemento trimItem : trimItems) { if ("org.eclipse.ui.internal.WorkbenchWindow.topBar".equals(trimItem //$NON-NLS-1$ .getString(IMemento.TAG_ID))) { visible = true; break; } } } return visible; } boolean isStatusBarVisible() { return getStatusBar() != null; } private IMemento getStatusBar() { IMemento trimLayoutMem = getChild(IWorkbenchConstants.TAG_TRIM); if (trimLayoutMem == null) { return null; } IMemento[] trimAreas = trimLayoutMem.getChildren(IWorkbenchConstants.TAG_TRIM_AREA); for (IMemento trimArea : trimAreas) { // ITrimManager.TOP == SWT.TOP if (SWT.BOTTOM == trimArea.getInteger(IMemento.TAG_ID)) { return trimArea; } } return null; } boolean hasStatusLine() { IMemento statusBar = getStatusBar(); if (statusBar != null) { IMemento[] trimItemMems = statusBar.getChildren(IWorkbenchConstants.TAG_TRIM_ITEM); for (IMemento trimItemMem : trimItemMems) { if (STATUS_LINE_MANAGER_ID.equals(trimItemMem.getID())) { return true; } } } return false; } boolean isWelcomePageOpen() { return (getChild(IWorkbenchConstants.TAG_INTRO) != null); } List<PerspectiveReader> getPerspectiveReaders() { List<PerspectiveReader> perspectives = new ArrayList<>(); IMemento perspContainer = getPerspectiveContainer(); if (perspContainer != null) { IMemento[] perspectiveMems = perspContainer .getChildren(IWorkbenchConstants.TAG_PERSPECTIVE); for (IMemento perspectiveMem : perspectiveMems) { PerspectiveReader perspective = new PerspectiveReader(perspectiveMem); perspectives.add(perspective); } } return perspectives; } private IMemento getPerspectiveContainer() { IMemento perspContainer = null; IMemento page = getPage(); if (page != null) { perspContainer = page.getChild(IWorkbenchConstants.TAG_PERSPECTIVES); } return perspContainer; } boolean isSelected() { IMemento page = getPage(); if (page == null) { return false; } Boolean selected = page.getBoolean(IWorkbenchConstants.TAG_FOCUS); return selected == null ? false : selected.booleanValue(); } String getActivePerspectiveId() { String activePerspectiveId = null; IMemento perspContainer = getPerspectiveContainer(); if (perspContainer != null) { activePerspectiveId = perspContainer.getString(IWorkbenchConstants.TAG_ACTIVE_PERSPECTIVE); } return activePerspectiveId; } List<InfoReader> getEditorStacks() { IMemento editorArea = getEditorArea(); List<InfoReader> readers = new ArrayList<>(); if (editorArea != null) { IMemento[] editorStackMems = editorArea.getChildren(IWorkbenchConstants.TAG_INFO); for (IMemento memento : editorStackMems) { readers.add(new InfoReader(memento)); } } return readers; } public Integer getDefaultFastViewSide() { Integer defaultFastViewSide = null; IMemento fastViewData = getChild("fastViewData"); //$NON-NLS-1$ if (fastViewData != null) { defaultFastViewSide = fastViewData.getInteger(IWorkbenchConstants.TAG_FAST_VIEW_SIDE); } return defaultFastViewSide; } private IMemento getEditorArea() { IMemento editors = getEditorsMemento(); if (editors != null) { return editors.getChild(IWorkbenchConstants.TAG_AREA); } return null; } List<EditorReader> getEditors() { List<EditorReader> readers = new ArrayList<>(); IMemento editors = getEditorsMemento(); if (editors != null) { IMemento[] editorMems = editors.getChildren(IWorkbenchConstants.TAG_EDITOR); for (IMemento memento : editorMems) { readers.add(new EditorReader(memento)); } } return readers; } private IMemento getEditorsMemento() { IMemento page = getPage(); if (page == null) { return null; } return page.getChild(IWorkbenchConstants.TAG_EDITORS); } List<ViewReader> getViews() { List<ViewReader> readers = new ArrayList<>(); IMemento page = getPage(); if (page == null) { return readers; } IMemento editors = page.getChild(IWorkbenchConstants.TAG_VIEWS); if (editors != null) { IMemento[] editorMems = editors.getChildren(IWorkbenchConstants.TAG_VIEW); for (IMemento memento : editorMems) { readers.add(new ViewReader(memento)); } } return readers; } private IMemento getPage() { return getChild(IWorkbenchConstants.TAG_PAGE); } static class EditorReader extends MementoReader { private EditorReader(IMemento memento) { super(memento); } String getLabel() { return getString(IWorkbenchConstants.TAG_TITLE); } String getType() { return getString(IWorkbenchConstants.TAG_ID); } String getStackId() { return getString(IWorkbenchConstants.TAG_WORKBOOK); } boolean isSelected() { return getBoolean(IWorkbenchConstants.TAG_FOCUS); } } static class ViewReader extends MementoReader { private ViewReader(IMemento memento) { super(memento); } String getId() { return getString(IWorkbenchConstants.TAG_ID); } String getLabel() { return getString(IWorkbenchConstants.TAG_PART_NAME); } IMemento getViewState() { IMemento viewStateMem = getChild(IWorkbenchConstants.TAG_VIEW_STATE); if (viewStateMem == null) { return null; } return createRenamedCopy(viewStateMem, IWorkbenchConstants.TAG_VIEW); } private XMLMemento createRenamedCopy(IMemento memento, String newName) { XMLMemento newMem = XMLMemento.createWriteRoot(newName); newMem.putMemento(memento); return newMem; } } }